package com.cardpay.bill;

import com.cardpay.common.log.Log;
import com.cardpay.common.util.ConfigUtil;
import com.cardpay.common.util.SQLHelper;
import com.cardpay.page.PageBean;
import com.cardpay.supplier.SupplierDao;
import com.cardpay.supplier.SupplierService;
import org.slf4j.Logger;

import java.util.List;
import java.util.RandomAccess;
import java.util.UUID;

/**
 * Created by asusa on 2017/1/24.
 */
public class BillService {

    private static final Logger log = Log.get();

    BillDao billDao = new BillDao();
    SupplierService supplierService = new SupplierService();

    /**
     * 查询账单
     *
     * @param id
     *            账单编号
     * @return
     */
    public Bill find(String id) {
        Bill bill = billDao.find(id);

        return bill;
    }

    public List<Bill> findAll(){
        return billDao.list();
    }

    public PageBean<Bill> findPagingBills(int pageNum, String name) {

        int pageSize = ConfigUtil.getPageSize();

        // 生成SQL语句的工具类（此处接受一些设置）
//        SQLHelper sqlHelper = new SQLHelper("t_bill", "s") //
//                .addWhere(null != name && 0 < name.length(), "s.name LIKE ?", "%" + name + "%") //

        SQLHelper sqlHelper = new SQLHelper("t_bill") //
                .addWhere(null != name && 0 < name.length(), "name LIKE ?", "%" + name + "%"); //

        // 查询指定页的数据列表
        PageBean<Bill> pageBeans = billDao.findPagingBill(pageNum, pageSize, sqlHelper);

        List<Bill> bills = pageBeans.getRecordList();

        if (bills instanceof RandomAccess) { // 不同的列表选择不同的遍历方式
            for (int i = 0; i < bills.size(); i++) {
                String billId = bills.get(i).getId();
                // 查询出此用户对应的角色
                bills.get(i).setSupplier(supplierService.findByBillId(billId));
            }
        }
        else {
            for (Bill bill : bills) {
                String billId = bill.getId();
                // 查询出此用户对应的角色
                bill.setSupplier(supplierService.findByBillId(billId));
            }
        }

        return pageBeans;
    }

    public boolean add(Bill bill) {

        String uuid = UUID.randomUUID().toString(); // 生成UUID主键

        log.debug("primary key(uuid): {}", uuid);

        bill.setId(uuid); // 设置主键

        if (0 < billDao.add(bill)) {
            return true;
        }

        return false;
    }

    public boolean delete(String id) {
        if (0 < billDao.delete(id)) {
            return true;
        }
        return false;
    }

    public boolean update(Bill bill) {
        if (0 < billDao.update(bill)) {
            return true;
        }
        return false;
    }
}
